#include<bits/stdc++.h> 
using namespace std;
//	给定两组正整数，其相似度指的是Nc/Nt*100%。其中Nc是两个集合共有的唯一的数的个数，Nt是
//两个集合各自拥有的唯一的数的个数和。
//1.每个输入包括一个测试用例，每个测试用例第一行给一个正整数N≤50，表示总的集合数
//2.随后N行，每行给定一个集合，以M≤10000开头，表示该集合中的数字个数。然后跟着M个范围在
//	[0,10^9]的数字。
//3.然后是一个正整数K≤2000，表示查询的条数。接着K行每行包括两个集合编号(1~N)。
//4.对于每个查询，输出一行相似度，保留一位小数。
//5.set，集合的交并 
int main(){
	int N,K;
	cin>>N;
	long t;
	unordered_set<long> s[N+1];	//不需要排序，只需要去重 
	for(int i = 1;i<=N;i++){
		int M;
		cin>>M;
		for(int j = 0;j<M;j++){
			scanf("%ld", &t);
			s[i].insert(t);
		}
	} 
	cin>>K;
	int s1,s2;
	float count_ = 0;
	unordered_set<long>::iterator it;
	for(int i = 0;i<K;i++){
		scanf("%d %d", &s1, &s2);
		count_ = 0;
		for(it=s[s1].begin();it!=s[s1].end();it++){
			if(s[s2].find((*it))!=s[s2].end()) count_++;	//找到重复的即可 
		}
		printf("%.1f\%\n", 100*count_/(s[s1].size()+s[s2].size()-count_));	//总和-重复=并集大小，重复=交集大小 
	}
	return 0;
} 